package com.ting.test.algorithms.大厂刷题班;

/**
 * 给定一个有序数组arr 代表坐落于X轴的点
 * 给定一个正数K，代表绳子的长度
 * 返回绳子最多能压中几个点
 * 即使绳子边缘覆盖住也算
 * <p>
 * 思路
 * <p>
 * 利用快慢指针法
 * 首先L，R都在0位置，R先移动 一直到不能移动为止，记录当前覆盖的点数,
 * L 右移
 * R 右移
 * 依此计算
 */
public class 绳子覆盖的点数 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 4, 5, 6, 7, 9};
        int length = 4;
        int count = process(arr, length);
    }

    private static int process(int[] arr, int length) {
        if (arr == null || length < 0) {
            return 0;
        }

        int L = 0;
        int R = 0; //L和R实际代表了X轴上的index

        int N = arr.length;
        int maxLength = 0;
        while (L < N) {
            while (R < N && arr[R] - arr[L] <= length) {
                R++;
            }
            maxLength = Math.max(maxLength, R - L);// R-L就代表当前窗口内所有的点数
            L++;
        }
        return maxLength;
    }
}
